//Header File for Groovey Transformer holder/handle class

#ifndef G_T_LIST
#define G_T_LIST

#include <list>
#include "gparticle_set.hpp"
#include "gtransformer.hpp"

class GTransformer_List{
    public:
    	GTransformer_List();
    	~GTransformer_List();
    	
    	///pre: Transforms must have been defined before manipulation! Otherwise: unspecified 
    	//////results! dum Dum DUM!!!
    	
    	void addTransform(const GTransformer& GTrans);	///result: add a transform to the list 
    													/////////of transforms in the list.
    	void Feed_once(GParticle_Set& GPSet); 			///result: The set of particles is 
    													/////////manipulated once. This is VERY 
    													/////////important that manip's happen once!
    	void Give(GParticle_Set& GPSet);	  			///result: The set of particles is stored 
    													/////////and manip'ed once. 
    													/////////Again: ONCE is important!
    														//NOTE: Special Conditions: if set 
    														//////is already loaded, the new set 
    														//////is overwritten with the 
    														//////current one given.
    	bool LaL();							  			///result: Locked and Loaded --- 
    													/////////Return true if transformer 
    													/////////has a working set stored
    	
    	///pre: specific to Again(), DUDE! Transformer must have a list set before running Again().
    	void Again(); 						  ///result: Again() runs the transform over it's set again.
    	
    //////
	//////Privates:
	//////
    private:
    	GParticle_Set *p_set;
    	std::list<GTransformer> transforms;
};


#endif
